package com.sicheng.蓝桥.国赛准备.第十一届蓝桥杯JAVAB;

import java.math.BigInteger;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/6/8 17:41
 */
public class C阶乘约数 {
    /**
     * 定义阶乘 n ! = 1 × 2 × 3 × ⋅ ⋅ ⋅ ×  n 。
     * 请问 100! （100的阶乘）有多少个约数。
     * <p>
     * 大致思路分解质因数
     * 把 n! 变成 (p1^c1)*(p2^c2)*....*(px^cx) ,px是质数
     * 括号里的有cx+1种约数情况  最终结果是(c1+1)*(c2+1)*....*(cx+1)
     * 例如 5!=1*2*3*4*5====>(2^3)*(3^1)*(5^1)
     * (2^0,2^1,2^2,2^3) 4种情况每一种都是5!的约数
     * (3^0,3^1)同理 2
     * (5^0,5^1)同理 2
     * 结果：5!的约数有4*2*2=16种
     */

    public static void main(String[] args) {
        int n = 100;
        int[] count = new int[n + 1];
        for (int i = 2; i <= n; i++) {
            int x = i;
            for (int j = 2; j * j <= x; j++) {
                while (x % j == 0) {
                    x /= j;
                    count[j]++;
                }
            }
            if (x > 1)
                count[x]++;
        }

        BigInteger res = new BigInteger("1");
        for (int i = 2; i <= n; i++) {
            if (count[i] > 0) {
                res = res.multiply(new BigInteger(String.valueOf(count[i] + 1)));
            }
        }

        System.out.println(res);
    }
}
